# 每次代码的编写都是对自己的考验
# 我爱打代码，代码使我快乐
# 布里斯班十年之约
# 此刻： 12:32
import argparse
import torch.cuda
import time
def creaenv():
    parser = argparse.ArgumentParser()
    parser.add_argument("--env", type=str, default="Pendulum-v1")
    parser.add_argument("--render", type=bool, default=False, help="测试默认渲染")
    parser.add_argument("--render-interval", type=int, default=2)
    parser.add_argument("--pool-size", type=int, default=10000, help="ReplayPoolSize")
    parser.add_argument("--batch-size", type=int, default=256)
    parser.add_argument("--gamma", type=float, default=0.95, help="折扣率")
    parser.add_argument("--actor-lr", type=float, default=0.001, help="actor-learning-rate")
    parser.add_argument("--critic-lr", type=float, default=0.001, help="critic-learning-rate")
    parser.add_argument("--tau", type=float, default=0.01, help="soft update网络所使用的权重参数")
    parser.add_argument("--max-step", type=int, default=200, help="Pendulum只允许走200步")
    parser.add_argument("--warm-episode", type=int, default=2)
    parser.add_argument("--episode", type=int, default=100)
    parser.add_argument("--test-episode", type=int, default=10)
    parser.add_argument("--load-path", type=str, default="", help="like: models/ddpg, ignore:_actor.pth or _critic.pth")
    parser.add_argument("--noise", type=str, default="None", help="Gauss or OU or None")
    parser.add_argument("--eps", type=float, default=0.9)
    parser.add_argument("--eps-decay", type=float, default=0.95)
    parser.add_argument("--eps-min", type=float, default=0.05, help="最小噪声影响权重")
    parser.add_argument("--save", action='store_true', default=True)
    parser.add_argument("--train", action='store_true', default=False, help="load model默认不训练")
    parser.add_argument("--eval", action='store_true', default=False, help="load model默认测试")
    parser.add_argument("--cuda", action='store_true', default=False)

    args = parser.parse_args()
    device = torch.device("cuda" if torch.cuda.is_available() and args.cuda else "cpu")
    now = time.localtime(time.time())
    now = f"{now.tm_year}-{now.tm_mon}-{now.tm_mday}"
    return args,device,now


def which_to_render(a):
    return True